public class Main {

//    public static void main(String[] args) {
//        //System.out.println("Hello world!");
//        Test test = new Test();
//        System.out.println(test);
//    }
//}
//
//class Test{
//    public String name;
//    public int x;
//    public int y;
//    Test() {
//        this.name = "重写测试";
//        this.x = 7;
//        this.y = 13;
//    }
//    public void func() {
//        System.out.println("方法测试");
//    }
//
//    @Override
//    public String toString() {
//        return "Test{" +
//                "name='" + name + '\'' +
//                ", x=" + x +
//                ", y=" + y +
//                '}';
//    }
    public static void main(String[] args) {
        //将不同的子类交给父类，父类在引用调用重写方法时，会发生动态绑定，从而调用子类的重写方法
//        Shape[] gather = {new Rectangle(),new Round(), new Triangle()};
//        for(Shape shapeOne:gather) {
//            shapeOne.draw();
//        }
        Shape shape = new Round();
        Triangle test = (Triangle)shape;
    }
}
class Shape {
    //构造方法
    void Shape() {
        System.out.println("画一个图形");
    }
    public void draw() {
        System.out.println("重写方法");
    }
}
//三角形
class Triangle extends Shape{
    @Override
    public void draw() {
      System.out.println("◀");
  }
}
//矩形
class Rectangle extends Shape{
    @Override
    public void draw() {
        System.out.println("▯");
    }
}
//圆形
class Round extends Shape{
    @Override
    public void draw() {
        System.out.println("●");
    }
}
// class Test{
//    public static void test(Shape shape) {
//        //使用父类形参进行接收，到时候直接传递子类实例对象，即可完成向上转型
//        Shape testONe = shape;
//        testONe.draw();
//    }
//}
//动态绑定尝试实现